package LeetCode;

/**
 * 将两个升序链表合并为一个新的 升序 链表并返回。新链表是通过拼接给定的两个链表的所有节点组成的
 */
public class Num21 {
    public ListNode mergeTwoLists(ListNode list1, ListNode list2) {
        //递归写法
        if(list1==null){
            return list2;
        }
        if(list2==null){
            return list1;
        }
        //此时list1  list2均不为空。已知两个链表；拼接操作未知【交给mer方法，拼接后的结果是新链表，接在list1或者list2后面】
        if(list1.val<=list2.val){
            list1.next=mergeTwoLists(list1.next, list2.next);
            return list1;
        }else{
            list2.next=mergeTwoLists(list1,list2.next);
            return list2;
        }





//        //先判断边界条件
//        if(list1==null){
//            return list2;
//        }
//        if(list2==null){
//            return list1;
//        }
//        //此时12都不为空
//        ListNode dummyHead=new ListNode(101);
//        ListNode last=dummyHead;//尾插
//        while(list1!=null&&list2!=null){
//            if(list1.val<= list2.val){//尾插：先把当前链表最后一个节点连到新节点，last再指向新节点
//                last.next=list1;
//                last=list1;
//
//                list1=list1.next;//list1条件更新
//            }else{
//                last.next=list2;
//                last=list2;
//                list2=list2.next;
//            }
//            //此时list1或者list2为null
//            if(list1==null){
//                last.next=list2;
//            }
//            if(list2==null){
//                last.next=list1;
//            }
//        }
//        return dummyHead.next;
    }
}
